package com.woniu.user.controller;


import com.woniu.common.pojo.dto.user.IncomeDto;
import com.woniu.common.pojo.vo.UserLoginVo;
import com.woniu.common.result.Result;
import com.woniu.common.result.ResultCode;
import com.woniu.common.util.BCrypt;
import com.woniu.common.util.JwtUtils;
import com.woniu.user.entity.UserInfo;
import com.woniu.user.service.IUserInfoService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author 贾玉亮
 * @since 2023-01-02
 */
@RestController
@RequestMapping("/user/user-info")
public class UserInfoController {
    @Resource
    private IUserInfoService userInfoServiceImpl;
    @PostMapping("/login")
    public Result login(@RequestBody UserInfo entity){
//        1.根据手机号获取密码
        String password=userInfoServiceImpl.login(entity.getUserMobile());
//        2.密码判断
        boolean flag= BCrypt.matches(entity.getLoginPassword(),password);
//        3.密码正确
        if(flag){
            Map<String,Object> claim = new HashMap<>();
            claim.put("mobile",entity.getUserMobile());
            String token = JwtUtils.getJwtToken(claim);
            return Result.ok(token);
        }

        return Result.error(ResultCode.ERROR);

    }
    @PostMapping("/info")
    public Result getInfo(String token, HttpServletRequest request){
//        1.从请求头获取X-Token
        String headerToken = request.getHeader("X-Token");
//        System.out.println(token);
//        2.从X-Token获取mobile
        String mobile = JwtUtils.getClaimByJwtToken(headerToken, "mobile");
//        System.out.println(mobile);
//        3.根据mobile从数据库获得admin用户信息
        UserLoginVo user = userInfoServiceImpl.getByMobile(mobile);
//            Admin admin = new Admin();
        System.out.println(user);
        return Result.ok(user);
    }

    @GetMapping("{mobile}")
    public Result getUserByMobile(@PathVariable String mobile){
        UserInfo userInfo = userInfoServiceImpl.getUserByMobile(mobile);
        return Result.ok(userInfo);
    }

    @PostMapping("/income")
    public Result incomeByUser(@RequestBody IncomeDto dto){
        userInfoServiceImpl.incomeByUser(dto);
        return Result.ok();
    }

    @PostMapping("/register")
    public Result registerUser(@RequestBody UserInfo userInfo){
        int i = userInfoServiceImpl.registerUser(userInfo);
        if (i>0){
            return Result.ok();
        }
        return Result.error();
    }
}

